home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / preccx / prccx240.lha / preccx.h < prev    next >
C/C++ Source or Header  |  1993-05-09  |  7KB  |  255 lines

  1. # ifndef PRECCX_H
  2. # define PRECCX_H
  3. /*
  4.   header file of precc macros
  5. */
  6.  
  7. # define __PRECC__ 2.40
  8.  
  9. # define CBUFFSIZE 4096
  10. # define NBUFFSIZE 4096
  11.  
  12. /* start up functions */
  13. void usage();
  14. int getkintarg();
  15.  
  16. /* locals */
  17. # define CHAR char
  18. typedef char *characters;
  19. # define CHARS characters
  20.  
  21. /* structures */
  22.  
  23. /* the class of agents */
  24. typedef struct {    /* place to hold info and get it out again */
  25. CHARS buffer;
  26. CHARS in;
  27. CHARS out;
  28. } AGENT;
  29. /* methods */
  30. /* VOID  initagent(char[])->(AGENT *) */
  31. /* char *putagent(char)   ->(AGENT *) */
  32. /* char *nputagent(char *)->(AGENT *) */
  33. /* char *getagent(char **)->(AGENT *) *//* supply a reference */
  34. /* char *resetagent       ->(AGENT *) */
  35.  
  36.  
  37. /*
  38. # define initagent(x,y) x={y,y,y}
  39. # define putagent(x,y) ((*((x).in)++)=(y),(*((x).in)=0),&(x).in[-1])
  40. # define nputagent(x,y) ((x).in=p_scpy((x).in,(y)),(x).out)
  41. # define getagent(x,y) ((*((x).in)++)=0,(y)=(x).out,(x).out=(x).in)
  42. # define resetagent(x) ((x).out=(x).in=(x).buffer)
  43. */
  44.  
  45.  
  46. extern CHAR cbuff[CBUFFSIZE];    /* the general stuff buffer */
  47. extern AGENT chars; 
  48.  
  49. # define cptr chars.in          /* continuity */
  50. # define nptr chars.out
  51.  
  52. extern CHAR nbuff[];         /* used to hold vars */
  53. extern AGENT namE; 
  54. extern AGENT args;
  55. extern AGENT keys; 
  56.  
  57. /* these are the operations on the name agent */
  58.  
  59. # undef putchar /* the stdio one */
  60. # define putchar myputchar
  61. extern CHARS myputchar(char);
  62. extern CHARS getname(CHARS *);
  63. extern CHARS putname(CHARS);
  64.  
  65. # define RESET {void resetall();resetall();}
  66.  
  67. # define P_REN(x,y) (printf("\
  68. STATUS %s(%s){\n\
  69. PARSER %s;\n\
  70. return((TOPARSER %s)(%s));\n\
  71. }\n\
  72. ",GNAME(x),(char*)environment,\
  73. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  74. GNAME(y),GARGS(y)),UNSETNAME(x))
  75.  
  76. # define P_AND(x,y,z) (printf("\
  77. static STATUS %s(%s){\n\
  78. PARSER %s, %s;\n\
  79. return p_andparse0n (TOPARSER %s,TOPARSER %s);\n\
  80. }\n\
  81. ",GNAME(x),(char*)environment,\
  82. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  83. !is_in(GNAME(z),(char*)plainenv)?GNAME(z):"dummy2",\
  84. CATFUNCARGS(y),CATFUNCARGS(z)),UNSETNAME(x))
  85.  
  86. /*********** discontinued ****************************
  87. # define P_STAR(x,y,z,u) (printf("\
  88. static STATUS %s(%s){\n\
  89. PARSER %s, %s;\n\
  90. PARAM %s;\n\
  91. return p_starparse0n (TOPARSER %s,TOPARSER %s);\n\
  92. }\n\
  93. ",GNAME(x),(char*)environment,\
  94. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  95. !is_in(GNAME(z),(char*)plainenv)?GNAME(z):"dummy2",\
  96. u,CATFUNCARGS(y),CATFUNCARGS(z)),UNSETNAME(x))
  97. ******************************************************/
  98.  
  99. # define P_STAR(x,y,z,u) (printf("\
  100. static STATUS %s(%s){\n\
  101. PARSER %s, %s;\n\
  102. PARAM %s; static STATUS p_tok;\n\
  103.   MARK;  p_tok = (TOPARSER %s) (%s);\n\
  104.   if (BADSTATUS(p_tok)) {RELEASE;return p_tok;}\n\
  105.   %s = (PARAM)p_tok; p_tok = (TOPARSER %s) (%s);\n\
  106.   if (BADSTATUS(p_tok)) {REWIND;} else {RELEASE;}\n\
  107.   return p_tok;\n\
  108. }\n\
  109. ",GNAME(x),(char*)environment,\
  110. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  111. !is_in(GNAME(z),(char*)plainenv)?GNAME(z):"dummy2",\
  112. u,GNAME(y),GARGS(y),u,GNAME(z),GARGS(z)),UNSETNAME(x))
  113.  
  114. # define P_ALT(x,y,z) (printf ("\
  115. static STATUS %s (%s){\n\
  116. PARSER %s, %s;\n\
  117. static STATUS p_tok;\n\
  118. p_tok = (TOPARSER %s) (%s);\n\
  119. return (GOODSTATUS(p_tok))?p_tok:(TOPARSER %s) (%s);\n\
  120. }\n\
  121. ",GNAME(x),(char*)environment,\
  122. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  123. !is_in(GNAME(z),(char*)plainenv)?GNAME(z):"dummy2",\
  124. GNAME(y),GARGS(y),GNAME(z),GARGS(z)),UNSETNAME(x))
  125.  
  126. # define P_ATT(x,y,z,w) (printf("\
  127. static VOID %s(%s){\n\
  128. %s\n\
  129. }\n\
  130. static STATUS %s(%s){\n\
  131. PARSER %s;ACTION %s;\n\
  132. return p_attach0n(TOPARSER %s,%s);\n\
  133. }\n\
  134. ",GNAME(z),(char*)environment,(w),\
  135. GNAME(x),(char*)environment,GNAME(y),GNAME(z),CATFUNCARGS(y),CATFUNCARGS(z)),UNSETNAME(x))
  136.  
  137. # define P_PRE(x,y,z,w) (printf("\
  138. static VOID %s(%s){\n\
  139. %s\n\
  140. }\n\
  141. static STATUS %s(%s){\n\
  142. PARSER %s;ACTION %s;\n\
  143. return p_prepend0n(%s,%s);\n\
  144. }\n\
  145. ",GNAME(z),(char*)environment,(w),\
  146. GNAME(x),(char*)environment,GNAME(y),GNAME(z),\
  147. CATFUNCARGS(z),CATFUNCARGS(y)),UNSETNAME(x))
  148.  
  149. # define P_OPT(x,y)   (printf("\
  150. static STATUS %s(%s){\n\
  151. PARSER %s;\n\
  152. return p_option0n(TOPARSER %s);\n\
  153. }\n\
  154. ",GNAME(x),(char*)environment,\
  155. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  156. CATFUNCARGS(y)),UNSETNAME(x))
  157.  
  158. # define P_ATA(x,y)   (printf("\
  159. static STATUS %s(%s){\n\
  160. return p_atch0(%s);\n\
  161. }\n\
  162. ",GNAME(x),(char*)environment,\
  163. (y)),UNSETNAME(x))
  164.  
  165. # define P_INF(x,y)   (printf("\
  166. static STATUS %s(%s){\n\
  167. PARSER %s;\n\
  168. return p_many0n(TOPARSER %s);\n\
  169. }\n\
  170. ",GNAME(x),(char*)environment,\
  171. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  172. CATFUNCARGS(y)),UNSETNAME(x))
  173.  
  174. # define P_ITR(x,y,z)   (printf("\
  175. static STATUS %s(%s){\n\
  176. PARSER %s;\n\
  177. return p_iter0n((int)%s,TOPARSER %s);\n\
  178. }\n\
  179. ",GNAME(x),(char*)environment,\
  180. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  181. z,CATFUNCARGS(y)),UNSETNAME(x))
  182.  
  183. # define P_SOM(x,y)   (printf("\
  184. static STATUS %s(%s){\n\
  185. PARSER %s;\n\
  186. return p_some0n(TOPARSER %s);\n\
  187. }\n\
  188. ",GNAME(x),(char*)environment,\
  189. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  190. CATFUNCARGS(y)),UNSETNAME(x))
  191.  
  192. # define P_PHA(x,y)   (printf("\
  193. static STATUS %s(%s){\n\
  194. PARSER %s;\n\
  195. return p_hidden0n(TOPARSER %s);\n\
  196. }\n\
  197. ",GNAME(x),(char*)environment,\
  198. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  199. CATFUNCARGS(y)),UNSETNAME(x))
  200.  
  201. # define P_ERR(x,y)   (printf("\
  202. static STATUS %s(%s){\n\
  203. PARSER %s;\n\
  204. return p_uerror0n(TOPARSER %s);\n\
  205. }\n\
  206. ",GNAME(x),(char*)environment,\
  207. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  208. CATFUNCARGS(y)),UNSETNAME(x))
  209.  
  210. # define P_UNI(x,y)   (printf("\
  211. static STATUS %s(%s){\n\
  212. PARSER %s;\n\
  213. return p_uniq0n(%s);\n\
  214. }\n\
  215. ",GNAME(x),(char*)environment,\
  216. GNAME(y),CATFUNCARGS(y)),UNSETNAME(x))
  217.  
  218. # define P_LIT(x,y)   (printf("\
  219. static STATUS %s(%s){\n\
  220. return p_exactly0(%s);\n\
  221. }\n\
  222. ",GNAME(x),(char*)environment,(y)),UNSETNAME(x))
  223.  
  224. # define P_ALI(x,y)   (printf("\
  225. static STATUS %s(%s){\n\
  226. return p_notexactly0(%s);\n\
  227. }\n\
  228. ",GNAME(x),(char*)environment,(y)),UNSETNAME(x))
  229.  
  230. # define P_RAN(x,y)   (printf("\
  231. static STATUS %s(%s){\n\
  232. PREDICATE %s;\n\
  233. return p_range0n(%s);\n\
  234. }\n\
  235. ",GNAME(x),(char*)environment,GNAME(y),CATFUNCARGS(y)),UNSETNAME(x))
  236.  
  237. # define P_TST(x,y)   (printf("\
  238. static STATUS %28%s){\n\
  239. return p_test0(%s);\n\
  240. }\n\
  241. ",GNAME(x),(char*)environment,(y)),UNSETNAME(x))
  242.  
  243. # define P_HID(x,y,z)   (printf("\
  244. static STATUS %s(%s){\n\
  245. PREDICATE %s;\n\
  246. PARSER %s;\n\
  247. return p_hide0n(TOPARSER %s,%s);\n\
  248. }\n\
  249. ",GNAME(x),(char*)environment,GNAME(z),\
  250. !is_in(GNAME(y),(char*)plainenv)?GNAME(y):"dummy1",\
  251. CATFUNCARGS(y),CATFUNCARGS(z)),UNSETNAME(x))
  252.  
  253.  
  254. # endif
  255.